<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/descrobject.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/descrobject.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/* Descriptors */</span>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfREVTQ1JPQkpFQ1RfSF8w"><span class="b">Py_DESCROBJECT_H</span></a>
<a name="3" /><span class="True">       3:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfREVTQ1JPQkpFQ1RfSF8w"><span class="b">Py_DESCROBJECT_H</span></a>
<a name="4" /><span class="False">       4:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="5" /><span class="False">       5:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">endif</span>
<a name="7" /><span class="True">       7:</span> 
<a name="8" /><span class="True">       8:</span> <span class="m">typedef</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">getter</span><span class="f">)</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="9" /><span class="True">       9:</span> <span class="m">typedef</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">setter</span><span class="f">)</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">PyGetSetDef</span> <span class="f">{</span>
<a name="12" /><span class="True">      12:</span>     <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">;</span>
<a name="13" /><span class="True">      13:</span>     <span class="b">getter</span> <span class="b">get</span><span class="f">;</span>
<a name="14" /><span class="True">      14:</span>     <span class="b">setter</span> <span class="b">set</span><span class="f">;</span>
<a name="15" /><span class="True">      15:</span>     <span class="m">char</span> <span class="f">*</span><span class="b">doc</span><span class="f">;</span>
<a name="16" /><span class="True">      16:</span>     <span class="m">void</span> <span class="f">*</span><span class="b">closure</span><span class="f">;</span>
<a name="17" /><span class="True">      17:</span> <span class="f">}</span> <span class="b">PyGetSetDef</span><span class="f">;</span>
<a name="18" /><span class="True">      18:</span> 
<a name="19" /><span class="True">      19:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="20" /><span class="True">      20:</span> <span class="m">typedef</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">wrapperfunc</span><span class="f">)</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">self</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">args</span><span class="f">,</span>
<a name="21" /><span class="True">      21:</span>                                  <span class="m">void</span> <span class="f">*</span><span class="b">wrapped</span><span class="f">)</span><span class="f">;</span>
<a name="22" /><span class="True">      22:</span> 
<a name="23" /><span class="True">      23:</span> <span class="m">typedef</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">wrapperfunc_kwds</span><span class="f">)</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">self</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">args</span><span class="f">,</span>
<a name="24" /><span class="True">      24:</span>                                       <span class="m">void</span> <span class="f">*</span><span class="b">wrapped</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">kwds</span><span class="f">)</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> 
<a name="26" /><span class="True">      26:</span> <span class="m">struct</span> <span class="b">wrapperbase</span> <span class="f">{</span>
<a name="27" /><span class="True">      27:</span>     <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">;</span>
<a name="28" /><span class="True">      28:</span>     <span class="m">int</span> <span class="b">offset</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span>     <span class="m">void</span> <span class="f">*</span><span class="b">function</span><span class="f">;</span>
<a name="30" /><span class="True">      30:</span>     <span class="b">wrapperfunc</span> <span class="b">wrapper</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span>     <span class="m">char</span> <span class="f">*</span><span class="b">doc</span><span class="f">;</span>
<a name="32" /><span class="True">      32:</span>     <span class="m">int</span> <span class="b">flags</span><span class="f">;</span>
<a name="33" /><span class="True">      33:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">name_strobj</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> <span class="f">}</span><span class="f">;</span>
<a name="35" /><span class="True">      35:</span> 
<a name="36" /><span class="True">      36:</span> <span class="k">/* Flags for above struct */</span>
<a name="37" /><span class="True">      37:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlXcmFwcGVyRmxhZ19LRVlXT1JEU18w"><span class="b">PyWrapperFlag_KEYWORDS</span></a> <span class="c">1</span> <span class="k">/* wrapper function takes keyword args */</span>
<a name="38" /><span class="True">      38:</span> 
<a name="39" /><span class="True">      39:</span> <span class="k">/* Various kinds of descriptor objects */</span>
<a name="40" /><span class="True">      40:</span> 
<a name="41" /><span class="True">      41:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="42" /><span class="True">      42:</span>     <a href="macros_ref.html#_UHlPYmplY3RfSEVBRF8w"><span class="b">PyObject_HEAD</span></a>
<a name="43" /><span class="True">      43:</span>     <span class="b">PyTypeObject</span> <span class="f">*</span><span class="b">d_type</span><span class="f">;</span>
<a name="44" /><span class="True">      44:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">d_name</span><span class="f">;</span>
<a name="45" /><span class="True">      45:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">d_qualname</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> <span class="f">}</span> <span class="b">PyDescrObject</span><span class="f">;</span>
<a name="47" /><span class="True">      47:</span> 
<a name="48" /><span class="True">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_UHlEZXNjcl9DT01NT05fMA__"><span class="b">PyDescr_COMMON</span></a> <span class="b">PyDescrObject</span> <span class="b">d_common</span>
<a name="49" /><span class="True">      49:</span> 
<a name="50" /><span class="True">      50:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlEZXNjcl9UWVBFXzA_"><span class="b">PyDescr_TYPE</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">PyDescrObject</span> <span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">d_type</span><span class="f">)</span>
<a name="51" /><span class="True">      51:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlEZXNjcl9OQU1FXzA_"><span class="b">PyDescr_NAME</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">PyDescrObject</span> <span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">d_name</span><span class="f">)</span>
<a name="52" /><span class="True">      52:</span> 
<a name="53" /><span class="True">      53:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="54" /><span class="True">      54:</span>     <a href="macros_ref.html#_UHlEZXNjcl9DT01NT05fMA__"><span class="b">PyDescr_COMMON</span></a><span class="f">;</span>
<a name="55" /><span class="True">      55:</span>     <span class="b">PyMethodDef</span> <span class="f">*</span><span class="b">d_method</span><span class="f">;</span>
<a name="56" /><span class="True">      56:</span> <span class="f">}</span> <span class="b">PyMethodDescrObject</span><span class="f">;</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="59" /><span class="True">      59:</span>     <a href="macros_ref.html#_UHlEZXNjcl9DT01NT05fMA__"><span class="b">PyDescr_COMMON</span></a><span class="f">;</span>
<a name="60" /><span class="True">      60:</span>     <span class="m">struct</span> <span class="b">PyMemberDef</span> <span class="f">*</span><span class="b">d_member</span><span class="f">;</span>
<a name="61" /><span class="True">      61:</span> <span class="f">}</span> <span class="b">PyMemberDescrObject</span><span class="f">;</span>
<a name="62" /><span class="True">      62:</span> 
<a name="63" /><span class="True">      63:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="64" /><span class="True">      64:</span>     <a href="macros_ref.html#_UHlEZXNjcl9DT01NT05fMA__"><span class="b">PyDescr_COMMON</span></a><span class="f">;</span>
<a name="65" /><span class="True">      65:</span>     <span class="b">PyGetSetDef</span> <span class="f">*</span><span class="b">d_getset</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span> <span class="f">}</span> <span class="b">PyGetSetDescrObject</span><span class="f">;</span>
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="69" /><span class="True">      69:</span>     <a href="macros_ref.html#_UHlEZXNjcl9DT01NT05fMA__"><span class="b">PyDescr_COMMON</span></a><span class="f">;</span>
<a name="70" /><span class="True">      70:</span>     <span class="m">struct</span> <span class="b">wrapperbase</span> <span class="f">*</span><span class="b">d_base</span><span class="f">;</span>
<a name="71" /><span class="True">      71:</span>     <span class="m">void</span> <span class="f">*</span><span class="b">d_wrapped</span><span class="f">;</span> <span class="k">/* This can be any function pointer */</span>
<a name="72" /><span class="True">      72:</span> <span class="f">}</span> <span class="b">PyWrapperDescrObject</span><span class="f">;</span>
<a name="73" /><span class="True">      73:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* Py_LIMITED_API */</span>
<a name="74" /><span class="True">      74:</span> 
<a name="75" /><span class="True">      75:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyClassMethodDescr_Type</span><span class="f">;</span>
<a name="76" /><span class="True">      76:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyGetSetDescr_Type</span><span class="f">;</span>
<a name="77" /><span class="True">      77:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyMemberDescr_Type</span><span class="f">;</span>
<a name="78" /><span class="True">      78:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyMethodDescr_Type</span><span class="f">;</span>
<a name="79" /><span class="True">      79:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyWrapperDescr_Type</span><span class="f">;</span>
<a name="80" /><span class="True">      80:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyDictProxy_Type</span><span class="f">;</span>
<a name="81" /><span class="True">      81:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="82" /><span class="True">      82:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">_PyMethodWrapper_Type</span><span class="f">;</span>
<a name="83" /><span class="True">      83:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* Py_LIMITED_API */</span>
<a name="84" /><span class="True">      84:</span> 
<a name="85" /><span class="True">      85:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyDescr_NewMethod</span><span class="f">(</span><span class="b">PyTypeObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyMethodDef</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="86" /><span class="True">      86:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyDescr_NewClassMethod</span><span class="f">(</span><span class="b">PyTypeObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyMethodDef</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="87" /><span class="True">      87:</span> <span class="m">struct</span> <span class="b">PyMemberDef</span><span class="f">;</span> <span class="k">/* forward declaration for following prototype */</span>
<a name="88" /><span class="True">      88:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyDescr_NewMember</span><span class="f">(</span><span class="b">PyTypeObject</span> <span class="f">*</span><span class="f">,</span>
<a name="89" /><span class="True">      89:</span>                                                <span class="m">struct</span> <span class="b">PyMemberDef</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="90" /><span class="True">      90:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyDescr_NewGetSet</span><span class="f">(</span><span class="b">PyTypeObject</span> <span class="f">*</span><span class="f">,</span>
<a name="91" /><span class="True">      91:</span>                                                <span class="m">struct</span> <span class="b">PyGetSetDef</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="92" /><span class="True">      92:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="93" /><span class="True">      93:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyDescr_NewWrapper</span><span class="f">(</span><span class="b">PyTypeObject</span> <span class="f">*</span><span class="f">,</span>
<a name="94" /><span class="True">      94:</span>                                                 <span class="m">struct</span> <span class="b">wrapperbase</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="95" /><span class="True">      95:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlEZXNjcl9Jc0RhdGFfMA__"><span class="b">PyDescr_IsData</span></a><span class="f">(</span><span class="b">d</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_UHlfVFlQRV8w"><span class="b">Py_TYPE</span></a><span class="f">(</span><span class="b">d</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">tp_descr_set</span> <span class="f">!=</span> <a href="macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="96" /><span class="True">      96:</span> <span class="f">#</span><span class="n">endif</span>
<a name="97" /><span class="True">      97:</span> 
<a name="98" /><span class="True">      98:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyDictProxy_New</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="99" /><span class="True">      99:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyWrapper_New</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="100" /><span class="True">     100:</span> 
<a name="101" /><span class="True">     101:</span> 
<a name="102" /><span class="True">     102:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyProperty_Type</span><span class="f">;</span>
<a name="103" /><span class="False">     103:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="104" /><span class="False">     104:</span> <span class="f">}</span>
<a name="105" /><span class="True">     105:</span> <span class="f">#</span><span class="n">endif</span>
<a name="106" /><span class="True">     106:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_DESCROBJECT_H */</span>
<a name="107" /><span class="True">     107:</span> 
<a name="108" /><span class="True">     108:</span> </pre>
  </body>
</html>
